<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>评论-马丁福勒的网站-首页</title>

    <link rel="stylesheet" href="./home.css">
</head>
<!-- 这个是首页 -->

<body>

    <!-- 页面头部 -->
    <header id="banner" style="background-image: url('./banner.png'); background-repeat: no-repeat">
        <div class="name-logo">
            <a href="https://martinfowler.com">
                <img src="./mf-name-white.png">
            </a>
        </div>
        <div class="searach">
            <form method="GET" action="https://www.google.com/search">
                <input type="hidden" name="ie" value="UTF-8">
                <input type="hidden" name="oe" value="UTF-8">
                <input class="field" type="text" name="q" size="15" maxlength="255" value="">
                <button class="button" type="submit" name="btnG" value=" " title="Search">
                    <input type="hidden" name="domains" value="martinfowler.com">
                    <input type="hidden" name="sitesearch" value="">
                    <input type="hidden" name="sitesearch" value="martinfowler.com">
                </button>
            </form>
        </div>
        <div class="menu-button navmenu-button">
            <a class="icon icon-bars" href="#navmenu-bottom"></a>
        </div>
        <nav class="top-menu">
            <ul>
                <li><a class="" href="https://refactoring.com"> <!-- Refactoring --> 重构</a></li>

                <li><a class="" href="./agile.html"><!-- Agile --> 敏捷</a></li>

                <li><a class="" href="./architecture"><!-- Architecture --> 架构</a></li>

                <li><a class="" href="./aboutMe.html"><!-- About --> 关于martinfowler </a></li>

                <li><a class="tw" href="https://www.thoughtworks.com">ThoughtWorks</a></li>

                <li><a class="icon icon-rss" href="./feed.atom" title="feed"></a></li>

                <li><a class="icon icon-twitter" href="https://www.twitter.com/martinfowler" title="twitter stream"></a>
                </li>
            </ul>
        </nav>
    </header>

    <nav id="top-navmenu" style="display: none;">
        <nav class="navmenu">
            <div class="nav-head">
                <div class="search">
                    <!-- SiteSearch Google -->
                    <form method="GET" action="https://www.google.com/search">
                        <input type="hidden" name="ie" value="UTF-8">
                        <input type="hidden" name="oe" value="UTF-8">
                        <input class="field" type="text" name="q" size="15" maxlength="255" value="">
                        <button class="button" type="submit" name="btnG" value=" " title="Search">
                            <input type="hidden" name="domains" value="martinfowler.com">
                            <input type="hidden" name="sitesearch" value="">
                            <input type="hidden" name="sitesearch" value="martinfowler.com">

                        </button>
                    </form>
                </div>

                <div class="closediv">
                    <span class="close" title="close"></span>
                </div>
            </div>

            <div class="nav-body">
                <div class="topics">
                    <h2>Topics</h2>

                    <p><a href="/collection/architecture"><!-- Architecture --> 架构</a></p>

                    <p><a href="https://refactoring.com"><!-- Refactoring --> 重构</a></p>

                    <p><a href="/collection/agile.html"><!-- Agile --> 敏捷</a></p>

                    <p><a href="/collection/delivery.html"><!-- Delivery --> 交付</a></p>

                    <p><a href="/collection/microservices"><!-- Microservices --> 微服务</a></p>

                    <p><a href="/collection/data"><!-- Data --> 数据</a></p>

                    <p><a href="/collection/testing"><!-- Testing --> 测试</a></p>

                    <p><a href="/collection/dsl.html"><!-- DSL --> 领域特定语言</a></p>
                </div>

                <div class="about">
                    <h2>about me</h2>

                    <p><a href="/collection/aboutMe.html">About</a></p>

                    <p><a href="/collection/books">Books</a></p>

                    <p><a href="/collection/faq.html">FAQ</a></p>
                </div>

                <div class="content">
                    <h2>content</h2>

                    <p><a href="/collection/videos.html">Videos</a></p>

                    <p><a href="/collection/tags">Content Index</a></p>

                    <p><a href="/collection/articles/eurogames">Board Games</a></p>

                    <p><a href="/collection/photos">Photography</a></p>
                </div>

                <div class="tw">
                    <h2>ThoughtWorks</h2>

                    <p><a href="https://thoughtworks.com/insights">Insights</a></p>

                    <p><a href="https://thoughtworks.com/careers">Careers</a></p>

                    <p><a href="https://thoughtworks.com/products">Products</a></p>
                </div>

                <div class="feeds">
                    <h2>follow</h2>

                    <p><a href="https://www.twitter.com/martinfowler">Twitter</a></p>

                    <p><a href="/collection/feed.atom">RSS</a></p>
                </div>
            </div>
        </nav>
    </nav>

    <!-- 网页主体 -->
    <main>
        <!-- 第一部分, 顶部 -->
        <section class="row top">
            <!-- 第一段文字 -->
            
            <section class="intro">
                <!-- 原文 -->
                <p>Software development is a young profession, and we are still learning the
                    techniques and building the tools to do it effectively. I've been involved
                    in this activity for over three decades and in the last two I've been
                    writing on this website about patterns and practices that make it easier to build useful
                    software. The site began as a place to put my own writing, but
                    I also use it to publish articles by my colleagues.</p>
              
              <p>In 2000, I joined <a class="highlight" href="https://thoughtworks.com">ThoughtWorks</a>, where my role
                    is to learn about the techniques that we've learned to deliver software
                    for our clients, and pass these techniques on to the wider software
                    industry. As this site has developed into a respected platform on software
                    development, I've edited and published articles by my colleagues, both ThoughtWorkers
                    and others, to help useful writing reach a wider audience.</p>

                <!-- 评论 -->
                <p>软件行业很年轻, 还在不断发展. martinfowler 在软件行业已经30年经验, 写这个网站已经20年, 
                        写的是关于构建软件的更好的模式实践. 这个网站原是记录个人的写作, 但也会发布同事的文章.</p>
                  
                <p> 2000年, martinfowler 加入了ThoughtWorks, 当时负责软件交付的工作, 并将相关技术传播到行业中.
                    随着这个网站发展为软件开发关注的地方, martinfowler 把同事的文章也发布在这里, 提供给更多的读者.</p>
            </section>

            <!-- 图片-靠右 -->
            <section class="photo">
                <p class="image"><img alt="photo of Martin Fowler" src="https://martinfowler.com/img/mf-dallas.jpg"></p>

                <p class="credit">photo: Christopher Ferguson</p>

                <p class="mf-name">Martin Fowler</p>
            </section>
        </section>

        <!-- 第二部分 主要内容-->
        <section class="row center">
            <!-- 左边, 文章 -->
            <section class="center-main">
                <section class="main-narrative" id="AWebsiteOnBuildingSoftwareEffectively">
                    <h1>A website on building software effectively</h1>
                    <!-- 评论 -->
                    <p>本网站主题是高效构建软件</p>

                    <p>If there's a theme that runs through my work and writing on this site,
                            it's the interplay between the shift towards agile thinking and the
                            technical patterns and practices that make agile software development
                            practical. While specifics of technology change rapidly in our
                            profession, fundamental practices and patterns are more stable. So
                            writing about these allows me to have articles on this site that are
                            several years old but still as relevant as when they were written.</p>
                    
                    <p>如果有一个关于本网站的工作主题的话, 那就是转向敏捷的思维和技术模式， 实践敏捷软件开发。
                        因为软件行业具体的技术更新迅速， 技术低层的实践和模式更加稳定。所以本网站的这些文章虽然
                        写作与许多年前，现在看来也是有价值的。
                    </p>
                    
                    <p>As software becomes more critical to modern business, software needs to
                            be able to react quickly to changes, allowing new features to be be
                            conceived, developed and put into production rapidly. The techniques of
                            <a class="highlight" href="/collection/agile.html">agile software development</a> began in the 1990s
                            and became steadily more popular in the last decade. They focus on a
                            flexible approach to planning, which allows software products to change
                            direction as the users' needs change and as product managers learn more
                            about how to make their users effective. While widely accepted now, agile
                            approaches are not easy, requiring significant skills for a team, but more
                            importantly a culture of open collaboration both within the team and with a
                            team's partners.</p>
                    <p>现代的软件需要能够快速响应变化，新功能能够快速交付。<a class="highlight" href="/agile.html">敏捷软件开发</a>技术
                        开始于 1990年代, 并在最近10年越来越流行。其关注灵活的实现计划，能改变软件产品的方向，以满足用户需求的改变。
                        大家意识到敏捷开发并非易事，需要团队的开发与合作，以及有效的技能。</p>
                    

                    
                    <p>This need to respond fluently to changes has an important impact upon
                            the <a class="highlight" href="/collection/architecture">architecture</a> of a software system. The
                            software needs to be built in such a way that it is able to adapt to
                            unexpected changes in features. One of the most important ways to do this
                            is to write clear code, making it easy to understand what the program
                            is supposed to do. This code should be divided into modules which allow
                            developers to understand only the parts of the system they need to make a
                            change. This production code should be supported with automated tests that
                            can detect any errors made when making a change while providing examples
                            of how internal structures are used. Large and complex software efforts
                            may find the <a class="highlight" href="/collection/microservices">microservices</a> architectural style
                            helps teams deploy software with less entangling dependencies.</p>

                    <p>敏捷需要依赖软件系统<a class="highlight" href="/collection/architecture">架构</a>. 软件需要按照可以适应未知的功能变动来构建. 
                            最重要的一个方法是编写干净的代码, 让人明确知道程序的目的. 代码应该分成模块，当开发人员修改系统时，只要修改对应的模块. 
                            代码应该支持自动化测试，可以捕获到代码改变时产生的任何错误，并提供内部结构工作机制. 
                            庞大复杂的软件可以借鉴 <a class="highlight" href="/collection/microservices">微服务</a> 架构风格帮助团队部署软件时避免依赖的混乱.</p>
                    
                    <p>Creating software that has a good architecture isn't something that can
                            be done first time. Like good prose, it needs regular revisions and
                            programmers learn more about what the product needs to do and how best to
                            design the product to achieve its goals. <a class="highlight" href="https://refactoring.com">Refactoring</a> is an essential technique to allow a
                            program to be changed safely. It consists of making small changes that
                            don't alter the observable behavior of the software. By combining lots of
                            small changes, developers can revise the software's structure supporting
                            significant modifications that weren't planned when the system was first
                            conceived.</p>


                    <p>创造有良好架构的软件不是一下子就能完成的. 就像散文诗需要不断修改， 开发人员更加了解产品的目的，之后知道如何用最好的方式来实现该目的.
                            软件想要安全的进行改变, <a class="highlight" href="https://refactoring.com">重构</a> 是必要的技术. 
                            重构是许多小的修改，不改变软件对外的表现. 使软件的结构调整, 最终可以支持原先未计划的功能.</p>
                    
                    <p>Software that runs only on a developer's machine isn't providing
                            value to the customers of the software. Traditionally releasing software
                            has been a long and complicated process, one that hinders the need to
                            evolve software quickly. <a class="highlight" href="/collection/delivery.html">Continuous Delivery</a> uses
                            automation and collaborative workflows to remove this bottleneck,
                            allowing teams to release software as often as the customers demand. 
                            For Continuous Delivery to be possible, we need to build in a solid
                            foundation of <a class="highlight" href="/collection/testing">Testing</a>, with a range of
                            automated tests that can give us confidence that our changes haven't
                            introduced any bugs. This leads us to integrate testing into
                            programming, which can act to improve our architecture.</p>
                    
                    <p>只在开发人员机器上运行的软件不会给用户提供价值. 传统发布软件要经过漫长复杂的过程, 阻碍了软件的快速迭代. 
                            <a class="highlight" href="/collection/delivery.html">持续交付</a> 使用自动化和写作的工作流程移除了这个阻碍,
                            让软件可以按照客户要求的频率进行交付. 
                            为了能持续交付, 我们需要构建稳定的 <a class="highlight" href="/collection/testing">测试</a>, 通过一系列的自动测试，让开发有信心没有引入任何 bugs. 
                            指引就让开发中进行测试, 可以强化架构.</p>
                </section>

                <!-- 话题卡片 -->
                <section class="card-box topics">
                    <section class="photostream article-card" id="Photostream">
                        <h2>Photostream</h2>
                        
                        <p><a href="https://martinfowler.com/photos/125.html"><img src="https://martinfowler.com/photos/125.jpg"></a></p>
                        
                        <p>Melrose, MA (2020)</p>
                    </section>
                    
                    <section class="data article-card" id="DataManagement">
                        <h2>Data Management</h2>

                        <p>数据管理</p>
                        
                        <p>There are many kinds of software out there, the kind I'm primarily
                                engaged is Enterprise Applications. One of the enduring problems we
                                need to tackle in this world is <a class="highlight" href="/collection/data">data management</a>. The aspects of data
                                managment I've focused on here are how to migrate data stores as their
                                applications respond to changing needs, coping with different contexts
                                across a large enterprise, the role of NoSQL databases, and the
                                broader issues of coping with data that is both Big and Messy.</p>
                        <p>作者主要参与的是企业用，最重要的是<a class="highlight" href="/collection/data">数据管理</a>.
                            当程序改变时，数据如何进行变化。如何复制大量混乱的数据.
                        </p>
                    </section>
                    
                    <section class="dsl article-card" id="Domain-specificLanguages">
                        <h2>Domain-Specific Languages</h2>

                        <p>领域特定语言</p>
                    
                        <p>A common problem in complex software systems is how to capture
                                complicated domain logic in a way that programmers can both easily
                                manipulate and also easily communicate to domain experts. <a class="highlight" href="/dsl.html">Domain-Specific Languages</a> (DSLs) create a custom language
                                for a particular problem, either with custom parsers or by conventions
                                within a host language.</p>
                        <p>复杂系统都会遇到的问题是如何让开发人员和业务专家对业务逻辑达成共识。 <a class="highlight" href="/dsl.html">领域特定语言</a> (DSLs) 为特定的问题创建一个自定义语言
                                可以方便的将业务专家的表达解析成程序逻辑</p>
                    </section>

                    

                    <section class="books article-card" id="Books">
                    <h2>Books</h2>
                    
                    <p>I've written seven books on software development, including
                              Refactoring, Patterns of Enterprise Application Architecture, and UML
                              Distilled. I'm also the editor of a signature series for
                              Addison-Wesley that includes five jolt award winners.</p>
                    
                    <p class="more"><a href="/collection/books">My Books Page...</a></p>
                    </section>
                    
                    <section class="talks article-card" id="ConferenceTalks">
                    <h2>Conference Talks</h2>
                    
                    <section class="picture">
                    <p class="img-link"><img src="https://martinfowler.com/architecture/oscon.png">
                    </p><p class="caption"></p>
                    <p></p>
                    </section>
                    
                    <p>I'm often asked to give talks at conferences, from which I've
                              inferred that I'm a pretty good speaker - which is ironic since I
                              really hate giving talks. You can form your own opinion of my talks by
                              watching videos of some my conference talks.</p>
                    
                    <p class="more"><a href="/collection/videos.html">My Videos Page...</a></p>
                    </section>
                    
                    <section class="games article-card" id="BoardGames">
                    <h2>Board Games</h2>
                    
                    <section class="picture">
                    <p class="img-link"><img src="https://martinfowler.com/board-games.png">
                    </p><p class="caption"></p>
                    <p></p>
                    </section>
                    
                    <p>I've long been a fan of board games, I enjoy a
                               game that fully occupies my mind, clearing out all the serious
                              thoughts for a bit, while enjoying the company of good friends. Modern
                              board games saw dramatic improvement in the 1990's with the rise of
                              Eurogames, and I expect many people would be surprised if they haven't
                              tried any of this new generation. I also appear regularly on <a href="/collection/bliki/HeavyCardboard.html">Heavy Cardboard</a>.</p>
                    
                    <p class="more"><a href="/collection/articles/eurogames/">My Board Games page...</a></p>
                    </section>
                </section>

                <!-- 标签 -->
                <section class="tags" id="Tags">
                    <h2>Tags</h2>
                    
                    <p><a href="/tags/API%20design.html">API design</a>&nbsp;· <a href="/tags/agile.html">agile</a>&nbsp;· <a href="/tags/agile%20adoption.html">agile adoption</a>&nbsp;· <a href="/tags/analysis%20patterns.html">analysis patterns</a>&nbsp;· <a href="/tags/application%20architecture.html">application architecture</a>&nbsp;· <a href="/tags/application%20integration.html">application integration</a>&nbsp;· <a href="/tags/bad%20things.html">bad things</a>&nbsp;· <a href="/tags/board%20games.html">board games</a>&nbsp;· <a href="/tags/build%20scripting.html">build scripting</a>&nbsp;· <a href="/tags/certification.html">certification</a>&nbsp;· <a href="/tags/collaboration.html">collaboration</a>&nbsp;· <a href="/tags/computer%20history.html">computer history</a>&nbsp;· <a href="/tags/conference%20panels.html">conference panels</a>&nbsp;· <a href="/tags/conferences.html">conferences</a>&nbsp;· <a href="/tags/continuous%20delivery.html">continuous delivery</a>&nbsp;· <a href="/tags/covid-19.html">covid-19</a>&nbsp;· <a href="/tags/data%20analytics.html">data analytics</a>&nbsp;· <a href="/tags/database.html">database</a>&nbsp;· <a href="/tags/design.html">design</a>&nbsp;· <a href="/tags/dictionary.html">dictionary</a>&nbsp;· <a href="/tags/distributed%20computing%20magazine.html">distributed computing magazine</a>&nbsp;· <a href="/tags/diversions.html">diversions</a>&nbsp;· <a href="/tags/diversity.html">diversity</a>&nbsp;· <a href="/tags/documentation.html">documentation</a>&nbsp;· <a href="/tags/domain%20driven%20design.html">domain driven design</a>&nbsp;· <a href="/tags/domain%20specific%20language.html">domain specific language</a>&nbsp;· <a href="/tags/domestic.html">domestic</a>&nbsp;· <a href="/tags/encapsulation.html">encapsulation</a>&nbsp;· <a href="/tags/enterprise%20architecture.html">enterprise architecture</a>&nbsp;· <a href="/tags/estimation.html">estimation</a>&nbsp;· <a href="/tags/event%20architectures.html">event architectures</a>&nbsp;· <a href="/tags/evolutionary%20design.html">evolutionary design</a>&nbsp;· <a href="/tags/experience%20reports.html">experience reports</a>&nbsp;· <a href="/tags/expositional%20architectures.html">expositional architectures</a>&nbsp;· <a href="/tags/extreme%20programming.html">extreme programming</a>&nbsp;· <a href="/tags/front-end.html">front-end</a>&nbsp;· <a href="/tags/gadgets.html">gadgets</a>&nbsp;· <a href="/tags/ieeeSoftware.html">ieeeSoftware</a>&nbsp;· <a href="/tags/infodecks.html">infodecks</a>&nbsp;· <a href="/tags/internet%20culture.html">internet culture</a>&nbsp;· <a href="/tags/interviews.html">interviews</a>&nbsp;· <a href="/tags/language%20feature.html">language feature</a>&nbsp;· <a href="/tags/language%20workbench.html">language workbench</a>&nbsp;· <a href="/tags/lean.html">lean</a>&nbsp;· <a href="/tags/legacy%20rehab.html">legacy rehab</a>&nbsp;· <a href="/tags/legal.html">legal</a>&nbsp;· <a href="/tags/metrics.html">metrics</a>&nbsp;· <a href="/tags/microservices.html">microservices</a>&nbsp;· <a href="/tags/mobile.html">mobile</a>&nbsp;· <a href="/tags/noSQL.html">noSQL</a>&nbsp;· <a href="/tags/object%20collaboration%20design.html">object collaboration design</a>&nbsp;· <a href="/tags/parser%20generators.html">parser generators</a>&nbsp;· <a href="/tags/photography.html">photography</a>&nbsp;· <a href="/tags/podcast.html">podcast</a>&nbsp;· <a href="/tags/popular.html">popular</a>&nbsp;· <a href="/tags/presentation%20technique.html">presentation technique</a>&nbsp;· <a href="/tags/privacy.html">privacy</a>&nbsp;· <a href="/tags/process%20theory.html">process theory</a>&nbsp;· <a href="/tags/productivity.html">productivity</a>&nbsp;· <a href="/tags/programming%20platforms.html">programming platforms</a>&nbsp;· <a href="/tags/programming%20style.html">programming style</a>&nbsp;· <a href="/tags/project%20planning.html">project planning</a>&nbsp;· <a href="/tags/recruiting.html">recruiting</a>&nbsp;· <a href="/tags/refactoring.html">refactoring</a>&nbsp;· <a href="/tags/refactoring%20boundary.html">refactoring boundary</a>&nbsp;· <a href="/tags/requirements%20analysis.html">requirements analysis</a>&nbsp;· <a href="/tags/ruby.html">ruby</a>&nbsp;· <a href="/tags/security.html">security</a>&nbsp;· <a href="/tags/talk%20videos.html">talk videos</a>&nbsp;· <a href="/tags/team%20environment.html">team environment</a>&nbsp;· <a href="/tags/team%20organization.html">team organization</a>&nbsp;· <a href="/tags/technical%20debt.html">technical debt</a>&nbsp;· <a href="/tags/technical%20leadership.html">technical leadership</a>&nbsp;· <a href="/tags/test%20categories.html">test categories</a>&nbsp;· <a href="/tags/testing.html">testing</a>&nbsp;· <a href="/tags/thoughtworks.html">thoughtworks</a>&nbsp;· <a href="/tags/tools.html">tools</a>&nbsp;· <a href="/tags/travel.html">travel</a>&nbsp;· <a href="/tags/uml.html">uml</a>&nbsp;· <a href="/tags/version%20control.html">version control</a>&nbsp;· <a href="/tags/web%20development.html">web development</a>&nbsp;· <a href="/tags/web%20services.html">web services</a>&nbsp;· <a href="/tags/website.html">website</a>&nbsp;· <a href="/tags/writing.html">writing</a></p>
                    
                    <p><a href="/tags/2021.html">2021</a>&nbsp;· <a href="/tags/2020.html">2020</a>&nbsp;· <a href="/tags/2019.html">2019</a>&nbsp;· <a href="/tags/2018.html">2018</a>&nbsp;· <a href="/tags/2017.html">2017</a>&nbsp;· <a href="/tags/2016.html">2016</a>&nbsp;· <a href="/tags/2015.html">2015</a>&nbsp;· <a href="/tags/2014.html">2014</a>&nbsp;· <a href="/tags/2013.html">2013</a>&nbsp;· <a href="/tags/2012.html">2012</a>&nbsp;· <a href="/tags/2011.html">2011</a>&nbsp;· <a href="/tags/2010.html">2010</a>&nbsp;· <a href="/tags/2009.html">2009</a>&nbsp;· <a href="/tags/2008.html">2008</a>&nbsp;· <a href="/tags/2007.html">2007</a>&nbsp;· <a href="/tags/2006.html">2006</a>&nbsp;· <a href="/tags/2005.html">2005</a>&nbsp;· <a href="/tags/2004.html">2004</a>&nbsp;· <a href="/tags/2003.html">2003</a>&nbsp;· <a href="/tags/2002.html">2002</a>&nbsp;· <a href="/tags/2001.html">2001</a>&nbsp;· <a href="/tags/2000.html">2000</a>&nbsp;· <a href="/tags/1999.html">1999</a>&nbsp;· <a href="/tags/1998.html">1998</a>&nbsp;· <a href="/tags/1997.html">1997</a>&nbsp;· <a href="/tags/1996.html">1996</a></p>
                    
                    <p><a href="/tags/index.html"><b>All Content</b></a></p>
                </section>
            </section>

            <!-- 右边, 资讯内容 -->
            <section class="feed">
                <section class="intro" id="RecentChanges">
                    <h1>Recent Changes</h1>
                    
                    <p>If you'd like to be notified when I post new
                            material, subcribe to my <a href="/collection/feed.atom">RSS</a> or <a href="https://www.twitter.com/martinfowler">Twitter</a> feeds.</p>
                </section>
                
                <section class="entries">
                    <article class="feed-entry">
                        <hr>
                        
                        <h2><a href="https://martinfowler.com/bliki/RefinementCodeReview.html">
                            Bliki: RefinementCodeReview</a></h2>
                        
                        <p>Bliki: 改进代码评审</p>
                        
                        <p class="datetime">Thu 28 Jan 2021 10:38 EST</p>
                        
                        <p>When people think of code reviews, they usually think in terms of an
                        explicit step in a development team's workflow. These days the Pre-Integration Review, carried out on a <a href="/bliki/PullRequest.html">Pull Request</a> is the most common mechanism for a code review, to the
                        point that many people witlessly consider that not using pull requests removes
                        all opportunities for doing code review. Such a narrow view of code reviews
                        doesn't just ignore a host of explicit mechanisms for review, it more
                        importantly neglects probably the most powerful code review technique - that
                        of perpetual refinement done by the entire team.</p>
                        
                        <p><a class="more" href="https://martinfowler.com/bliki/RefinementCodeReview.html">more ...</a></p>
                    </article>
                
                    <article class="feed-entry">
                        <hr>
                        
                        <h2><a href="https://martinfowler.com/bliki/PullRequest.html">Bliki: PullRequest</a></h2>

                        <p>Bliki: 请求合并</p>
                        
                        <p class="datetime">Thu 28 Jan 2021 10:37 EST</p>
                        
                        <p>Pull Requests are a mechanism popularized by github, used to help facilitate merging of
                        work, particularly in the context of open-source projects. A contributor works
                        on their contribution in a fork (clone) of the central repository. Once their
                        contribution is finished they create a pull request to notify the owner of the
                        central repository that their work is ready to be merged into the mainline.
                        Tooling supports and encourages code review of the
                        contribution before accepting the request.  Pull requests have become widely
                        used in software development, but critics are concerned by the addition of
                        integration friction which can prevent continuous integration.</p>
                        
                        <p><a class="more" href="https://martinfowler.com/bliki/PullRequest.html">more ...</a></p>
                    </article>
                
                    <article class="feed-entry">
                        <hr>
                        
                        <h2><a href="https://martinfowler.com/articles/202101-lies-and-democracy.html">The Lies that can Undermine Democracy</a></h2>

                        <p>民主的谎言</p>
                        
                        <p class="datetime">Tue 12 Jan 2021 09:56 EST</p>
                        
                        <p>Like many Americans, I was transfixed and horrified by the recent
                            assault on the Capitol. Much of this anger originates in lies perpetrated
                            by irresponsible politicians and spread through media agencies. Lies like
                            this can destroy democracies, and while we must have free speech we must
                            not be free of the consequences of that speech</p>
                        
                        <p><a class="more" href="https://martinfowler.com/articles/202101-lies-and-democracy.html">more…</a></p>
                    </article>
                    
                    <article class="feed-entry">
                        <hr>
                        
                        <h2><a href="https://martinfowler.com/articles/patterns-of-distributed-systems/">Some more Distributed Systems Patterns</a></h2>

                        <p>一些分布式系统的模式</p>
                        
                        <p class="datetime">Tue 05 Jan 2021 09:43 EST</p>
                        
                        <div class="img"><a href="https://martinfowler.com/articles/patterns-of-distributed-systems/"><img src="https://martinfowler.com/articles/patterns-of-distributed-systems/card.png" width=""></a></div>
                        
                        <p>Unmesh Joshi has a few more of his Patterns of Distributed Systems ready to
                            share with the world.</p>
                        
                        <ul>
                        <li><a href="/articles/patterns-of-distributed-systems/consistent-core.html">Consistent Core</a> looks at how a large cluster can
                                keep some information strongly consistent, </li>
                        
                        <li><a href="/articles/patterns-of-distributed-systems/time-bound-lease.html">Lease</a> allows unreliable nodes
                                to access limited resources without blocking them when they fail </li>
                        
                        <li><a href="/articles/patterns-of-distributed-systems/state-watch.html">State
                                Watch</a> allows clients to be notified of changes on a server.</li>
                        
                        <li><a href="/articles/patterns-of-distributed-systems/idempotent-receiver.html">Idempotent
                                Receiver</a> ensures servers don't process a retried request more than
                                once.</li>
                        </ul>
                        
                        <p><a class="more" href="https://martinfowler.com/articles/patterns-of-distributed-systems/">more…</a></p>
                    </article>
                    
                    <article class="feed-entry">
                        <hr>
                        
                        <h2><a href="https://martinfowler.com/articles/developer-effectiveness.html">Maximizing Developer Effectiveness</a></h2>

                        <p>开发者最大效率</p>
                        
                        <p class="datetime">Tue 05 Jan 2021 09:40 EST</p>
                        
                        <div class="img"><a href="https://martinfowler.com/articles/developer-effectiveness.html"><img src="https://martinfowler.com/articles/developer-effectiveness/micro-feedback-loops.png" width=""></a></div>
                        
                        <p>My colleague Tim Cochran has helped many software engineering
                            organizations transform to respond faster to changing market needs. Often
                            companies struggle with these transformations and a primary reason for
                            these problems is that engineering organization has neglected to provide
                            developers with an effective working environment. The key to
                            to developing an effective environment is to concentrate on feedback loops.</p>
                        
                        <p>In this first installment, Tim contrasts a developer's day between
                            high-effectiveness and low-effectiveness environments, using this contrast
                            to show that poor organizations need to remove the common frictions that make
                            developers feel unproductive .</p>
                        
                        <p><a class="more" href="https://martinfowler.com/articles/developer-effectiveness.html">more…</a></p>
                    </article>
                    
                    <article class="feed-entry">
                        <hr>
                        
                        <h2><a href="https://martinfowler.com/articles/2020-music.html">My favorite musical discoveries of 2020</a></h2>

                        <p>2020 年最喜欢的音乐</p>
                        
                        <p class="datetime">Tue 22 Dec 2020 12:56 EST</p>
                        
                        <div class="img"><a href="https://martinfowler.com/articles/2020-music.html"><img src="https://martinfowler.com/articles/2020-music/card.png" width=""></a></div>
                        
                        <p>Like most people, I'm looking forward to seeing 2020 in the rear-view
                            mirror, but even this ugly year has brought some good things. For the last
                            three decades I've regularly bought a few albums every month, and I
                            thought I'd pick out a half-dozen favorites in the hope that they lead
                            some readers to share at least a bit of my musical tastes. I've been doing
                            most of my musical buying on Bandcamp, so you can easily sample them.</p>
                        
                        <p><a class="more" href="https://martinfowler.com/articles/2020-music.html">more…</a></p>
                    </article>
                </section>
            </section>
        </section>

    </main>


    <!-- 第三部分 -->
    <nav id="bottom-navmenu" style="display: none;">
        <nav class="navmenu">
            <div class="nav-head">
                <div class="search">
                    <!-- SiteSearch Google -->
                    <form method="GET" action="https://www.google.com/search">
                        <input type="hidden" name="ie" value="UTF-8">
                        <input type="hidden" name="oe" value="UTF-8">
                        <input class="field" type="text" name="q" size="15" maxlength="255" value="">
                        <button class="button" type="submit" name="btnG" value=" " title="Search">
                            <input type="hidden" name="domains" value="martinfowler.com">
                            <input type="hidden" name="sitesearch" value="">
                            <input type="hidden" name="sitesearch" value="martinfowler.com">

                        </button>
                    </form>
                </div>

                <div class="closediv">
                    <span class="close" title="close"></span>
                </div>
            </div>

            <div class="nav-body">
                <div class="topics">
                    <h2>Topics</h2>

                    <p><a href="/architecture">Architecture</a></p>

                    <p><a href="https://refactoring.com">Refactoring</a></p>

                    <p><a href="/agile.html">Agile</a></p>

                    <p><a href="/delivery.html">Delivery</a></p>

                    <p><a href="/microservices">Microservices</a></p>

                    <p><a href="/data">Data</a></p>

                    <p><a href="/testing">Testing</a></p>

                    <p><a href="/dsl.html">DSL</a></p>
                </div>

                <div class="about">
                    <h2>about me</h2>

                    <p><a href="/aboutMe.html">About</a></p>

                    <p><a href="/books">Books</a></p>

                    <p><a href="/faq.html">FAQ</a></p>
                </div>

                <div class="content">
                    <h2>content</h2>

                    <p><a href="/videos.html">Videos</a></p>

                    <p><a href="/tags">Content Index</a></p>

                    <p><a href="/articles/eurogames">Board Games</a></p>

                    <p><a href="/photos">Photography</a></p>
                </div>

                <div class="tw">
                    <h2>ThoughtWorks</h2>

                    <p><a href="https://thoughtworks.com/insights">Insights</a></p>

                    <p><a href="https://thoughtworks.com/careers">Careers</a></p>

                    <p><a href="https://thoughtworks.com/products">Products</a></p>
                </div>

                <div class="feeds">
                    <h2>follow</h2>

                    <p><a href="https://www.twitter.com/martinfowler">Twitter</a></p>

                    <p><a href="/feed.atom">RSS</a></p>
                </div>
            </div>
        </nav>
    </nav>
    <!-- 脚部, 脚部导航 -->
    <footer id="page-footer">
        <div class="tw-logo">
            <a href="http://www.thoughtworks.com">
                <img src="https://martinfowler.com/tw-white-300.png">
            </a>
        </div>
        <div class="menu-button">
            <div class="icon-bars navmenu-button"></div>
        </div>
        <div class="copyright">
            <p>© Martin Fowler | <a href="http://www.thoughtworks.com/privacy-policy">Privacy Policy</a> | <a
                    href="/aboutMe.html#disclosures">Disclosures</a></p>
        </div>
    </footer>


    <script src="./jquery-3.5.1.min.js" type="text/javascript"></script>
    <script src="./mfcom.js" type="text/javascript"></script>
</body>


</html>